#region Copyright (C) 2007 Jens Winter

//Copyright (C) 2007 Jens Winter

//This library is free software; you can redistribute it and/or
//modify it under the terms of the GNU Lesser General Public
//License as published by the Free Software Foundation; either
//version 2.1 of the License, or (at your option) any later version.

//This library is distributed in the hope that it will be useful,
//but WITHOUT ANY WARRANTY; without even the implied warranty of
//MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
//Lesser General Public License for more details.

//You should have received a copy of the GNU Lesser General Public
//License along with this library; if not, write to the Free Software
//Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA

#endregion

using System;
using System.Collections.Generic;
using System.Linq;
using Flynn.Core;
using Flynn.Core.TaskResults;

namespace Flynn.TaskServices
{
    public class CheckDatabaseTaskService : ITaskService
    {
        public string Execute(IEngine engine, string[] args)
        {
            if (engine == null)
                throw new ArgumentNullException("engine");

            IEnumerable<string> projects = from a in args
                                           where a.StartsWith("/project:")
                                           select a.Replace("/project:", "");

            if (projects.Count() == 0)
                return "Failure: No project file specified";

            string project = projects.First();

            IEnumerable<string> connectionStrings = from a in args
                                                    where a.StartsWith("/connection:")
                                                    select a.Replace("/connection:", "");

            if (connectionStrings.Count() == 0)
                return "Failure: No connection string specified";

            string connectionString = connectionStrings.First();

            CheckingDatabaseResult checkingDatabaseResult = engine.CheckDatabase(project, connectionString);
            if (checkingDatabaseResult.Failed)
                return "Failure: " + checkingDatabaseResult.FailureMessage;
            else
                return string.Format("Current version: {0}", checkingDatabaseResult.CurrentVersion);
        }
    }
}